home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / jst_dev / sources / src / loaders / JamesPond / jamespondhd.asm < prev    next >
Assembly Source File  |  2000-04-12  |  5KB  |  317 lines

  1. ; *** James Pond Hard Disk Loader V0.9
  2. ; *** Written by Jean-François Fabre
  3.  
  4.  
  5.     include    "jst.i"
  6.  
  7.     HD_PARAMS    "jpond.d",STD_DISK_SIZE,1
  8.  
  9. BUILD_BLITWAIT:MACRO
  10. BlitWait\1
  11.     JSRGEN    WaitBlit
  12.     move.w    #$\1,$DFF058
  13.     rts
  14.     ENDM
  15.  
  16. PATCH_BLITWAIT:MACRO
  17.     move.l    #$4E714EB9,\2
  18.     GETUSRADDR    BlitWait\1
  19.     move.l    D0,\2+4
  20.     ENDM
  21.     
  22.  
  23. _loader:
  24.     RELOC_MOVEL    D0,trainer
  25.  
  26.     Mac_printf    "James Pond HD Loader V0.9a"
  27.     Mac_printf    "Coded by Jean-François Fabre © 1997"
  28.  
  29.     tst.l    D0
  30.     beq    skip$
  31.  
  32.     NEWLINE
  33.     Mac_printf    "Trainer activated"
  34. skip$
  35.     JSRABS    LoadDisks
  36.     JSRABS    TransfRoutines
  37.  
  38.     moveq.l    #0,D0
  39. ;    move.l    #CACRF_CopyBack,D1
  40.     move.l    #-1,D1
  41.     JSRABS    Degrade
  42.  
  43. ;    WAIT_LMB
  44.  
  45.     GO_SUPERVISOR
  46.     SAVE_OSDATA    $80000
  47.  
  48.     JSRGEN    InitTrackDisk
  49.  
  50.     move.w    #$2,$1C(A1)
  51.     MOVE.L    #$00020000,40(A1)    ;00: 237C000200000028
  52.     MOVE.L    #$000B6E00,44(A1)    ;08: 237C000B6E00002C
  53.     MOVE.L    #$00001400,36(A1)    ;10: 237C000014000024
  54.     MOVE    #$000E,D1        ;18: 323C000E
  55. LAB_0000:
  56.     MOVE    D1,-(A7)        ;1C: 3F01
  57.     JSRGEN    TrackLoad
  58.     MOVE    (A7)+,D1        ;22: 321F
  59.     ADDI.L    #$00001400,40(A1)    ;24: 06A9000014000028
  60.     ADDI.L    #$00002C00,44(A1)    ;2C: 06A900002C00002C
  61.     DBF    D1,LAB_0000        ;34: 51C9FFE6
  62.  
  63.     PATCHABSJMP    $2F94C,PatchLoader1
  64.  
  65.     JSRGEN    FlushCachesHard
  66.  
  67.     JMP    $2F912
  68.  
  69.  
  70. PatchLoader1:
  71.     STORE_REGS
  72.     bsr    SetupPatches
  73.     JSRGEN    FlushCachesHard
  74.     RESTORE_REGS
  75.     nop
  76.     nop
  77.     JMP    $12626
  78.     nop
  79.     nop
  80.  
  81. SetupPatches:
  82.     ; *** disk loader
  83.  
  84.     PATCHUSRJMP    $104CC,ReadSectors
  85.  
  86.     ; *** remove disk accesses
  87.  
  88.     move.w    #$4E75,$10806
  89.     move.w    #$4E75,$10858
  90.     move.w    #$4E75,$108FC
  91.     move.w    #$4E75,$107CC
  92.     move.w    #$6006,$126C4
  93.  
  94.     ; *** end decrunch
  95.  
  96.     PATCHUSRJMP    $C95C,EndDecrunch
  97.  
  98.     ; *** keyboard interrupt
  99.  
  100.     PATCHUSRJSR    $C346,KbInt
  101.  
  102.     ; *** trainer
  103.     
  104.     move.l    trainer(pc),D0
  105.     beq    sktr$
  106.  
  107.     move.w    #$4A78,$9AE8
  108.  
  109. sktr$
  110.  
  111.     ; *** blitter waits (registers, indexed)
  112.  
  113.     move.w    #$4EF9,$B0.W
  114.     GETUSRADDR    BlitWaitD1_A5
  115.     move.l    D0,$B2.W
  116.     move.w    #$4EF9,$B6.W
  117.     GETUSRADDR    BlitWaitD7_A6
  118.     move.l    D0,$B8.W
  119.  
  120.     move.l    #$4EB800B0,D0
  121.  
  122.     move.l    D0,$EECA
  123.     move.l    D0,$EED8
  124.     move.l    D0,$EEE4
  125.     move.l    D0,$EEF0
  126.  
  127.     move.l    #$4EB800B6,D0
  128.     
  129.     move.l    D0,$ED08
  130.     move.l    D0,$ED14
  131.     move.l    D0,$ED20
  132.     move.l    D0,$ED2C
  133.     move.l    D0,$ED9C
  134.     move.l    D0,$EDB0
  135.     move.l    D0,$EDC4
  136.     move.l    D0,$EDD8
  137.  
  138.     ; *** blitter waits (hardcoded)
  139.  
  140.     PATCH_BLITWAIT    1420,$4932
  141.     PATCH_BLITWAIT    03C1,$AA90
  142.     PATCH_BLITWAIT    03CA,$B026
  143.     PATCH_BLITWAIT    2816,$BDE6
  144.     PATCH_BLITWAIT    2816,$BDF6
  145.     PATCH_BLITWAIT    280F,$BE3E
  146.     PATCH_BLITWAIT    280F,$BE52
  147.     PATCH_BLITWAIT    2814,$11826
  148.     PATCH_BLITWAIT    2814,$11838
  149.  
  150.     ; *** blitter waits (registers)
  151.     
  152.     PATCHUSRJSR    $A694,BlitWaitD0
  153.     PATCHUSRJSR    $A6AE,BlitWaitD0
  154.     PATCHUSRJSR    $A6C8,BlitWaitD0
  155.     PATCHUSRJSR    $C712,BlitWaitD0
  156.  
  157.     GETUSRADDR    BlitWaitD1
  158.  
  159.     move.l    #$33C100DF,D1
  160.     move.w    #$F058,D2
  161.  
  162.     lea    $A000,A0
  163.     lea    $B000,A1
  164.  
  165. loop$
  166.     cmp.l    (A0),D1
  167.     beq.b    found$
  168. next$
  169.     addq.l    #2,A0
  170.     cmp.l    A0,A1
  171.     bne.b    loop$
  172.  
  173.     rts
  174.  
  175. found$
  176.     cmp.w    4(A0),D2
  177.     bne.b    next$
  178.     
  179.     ; *** sequence found, let's patch
  180.  
  181.     move.w    #$4EB9,(A0)+
  182.     move.l    D0,(A0)
  183.  
  184.     bra.b    next$
  185.  
  186.     
  187.  
  188.     BUILD_BLITWAIT    1420
  189.     BUILD_BLITWAIT    03C1
  190.     BUILD_BLITWAIT    03CA
  191.     BUILD_BLITWAIT    2816
  192.     BUILD_BLITWAIT    280F
  193.     BUILD_BLITWAIT    2814
  194.  
  195. BlitWaitD0:
  196.     JSRGEN    WaitBlit
  197.     move.w    D0,$DFF058
  198.     rts
  199.  
  200. BlitWaitD1:
  201.     JSRGEN    WaitBlit
  202.     move.w    D1,$DFF058
  203.     rts
  204.  
  205. BlitWaitD1_A5:
  206.     JSRGEN    WaitBlit
  207.     move.w    D1,($58,A5)
  208.     rts
  209.  
  210. BlitWaitD7_A6:
  211.     JSRGEN    WaitBlit
  212.     move.w    D7,($58,A6)
  213.     rts
  214.  
  215. KbInt:
  216.     ror.b    #1,D0
  217.     move.b    D0,($159).W
  218.     cmp.b    #$59,D0
  219.     bne    noquit$
  220.     JSRGEN    InGameExit
  221. noquit$
  222.     RTS
  223.  
  224. EndDecrunch
  225.     tst.l    D5
  226.     bne    error$
  227.     rts
  228.  
  229. error$:
  230.     lea    DecErr(pc),A0
  231.     JSRGEN    SetExitRoutine
  232.     JSRGEN    InGameExit
  233.     move.w    #$F00,$DFF180
  234.     bra    error$
  235.  
  236. ReadSectors:
  237.     STORE_REGS
  238.     moveq    #0,D0
  239.     JSRGEN    GetDiskPointer
  240.     move.l    D0,A0
  241.  
  242.     moveq    #0,D0
  243.     moveq    #0,D1
  244.     moveq    #0,D2
  245.     moveq    #0,D3
  246.     
  247.     move.w    $27A6.W,D0    ; disk side
  248.     mulu.w    #$B,D0
  249.     lsl.l    #8,D0
  250.     add.l    D0,D0
  251.     
  252.  
  253.     move.w    $27A8.W,D1    ; start track (track = both sides ($2C00))
  254.     mulu.w    #$B,D1
  255.     lsl.l    #8,D1
  256.     add.l    D1,D1
  257.     add.l    D1,D1
  258.  
  259.     add.l    D0,D1
  260.     add.l    D1,A0        ; source buffer
  261.  
  262.     move.l    $27AE,A1    ; destination buffer
  263.  
  264.     move.w    $27AA,D2    ; sector offset
  265.     subq    #1,D2
  266.     lsl.l    #7,D2
  267.     add.l    D2,D2
  268.     add.l    D2,D2
  269.     add.l    D2,A0
  270.  
  271.  
  272.     move.l    #$1400,D4    ; real track length
  273.     sub.l    D2,D4
  274.     bmi    error$
  275.  
  276.     move.w    $27AC,D3
  277.     lsl.l    #7,D3
  278.  
  279. copy$
  280.     move.l    (A0)+,(A1)+
  281.     subq.l    #4,D4
  282.     bne    skip$
  283.     add.l    #$1800,A0
  284.     move.l    #$1400,D4    ; real track length
  285. skip$
  286.     subq.l    #1,D3
  287.     bne.b    copy$
  288.  
  289.     move.l    A1,$27AE
  290.     clr.w    $27AC
  291.  
  292.     JSRGEN    ResetSprites
  293.  
  294.     RESTORE_REGS
  295.     RTS
  296.  
  297. error$
  298.     JSRGEN    WaitMouse
  299.     JSRGEN    InGameExit
  300.  
  301. MemErr:
  302.     Mac_printf    "** Not enough memory to run James Pond!"
  303.     JMPABS    CloseAll
  304.  
  305. DecErr:
  306.     Mac_printf    "** Decrunch failed. Disk corrupt!"
  307.     Mac_printf    "   Press RETURN"
  308.     JSRABS    WaitReturn
  309.     RTS
  310.  
  311. trainer:
  312.     dc.l    0
  313. ExtBase:
  314.     dc.l    0
  315.  
  316.  
  317.